<template>
    <div>
        <navigation-bar :customTitle="curTitle">
            <div class="searchContent">
                <custom-button type="plOpr" style="margin-right: 10px" @plOpr="plOprClick"></custom-button>
                <custom-button type="systemParams" style="margin-right: 10px" @systemParams="systemParamsClick"></custom-button>
                <custom-button type="userParams" style="margin-right: 10px" @userParams="userParamsClick"></custom-button>
                <el-dropdown @command="hzClick">
                    <el-button type="primary" style="background-color: #83bd51; border-color: #83bd51"
                        ><img src="@/assets/images/user/tdd.png" style="width: 12px" /> 通断电<i
                            class="el-icon-arrow-down el-icon--right"
                        ></i>
                    </el-button>
                    <el-dropdown-menu slot="dropdown">
                        <el-dropdown-item command="hz">合闸</el-dropdown-item>
                        <el-dropdown-item command="fz">分闸</el-dropdown-item>
                        <el-dropdown-item command="xs">校时</el-dropdown-item>
                        <el-dropdown-item command="cq">重启</el-dropdown-item>
                    </el-dropdown-menu>
                </el-dropdown>
            </div>
        </navigation-bar>

        <div>
            <table-index
                :dataSource="dataSource"
                :tableColumns="tableColumns"
                :btnList="btnList"
                :pageSize="pageSize"
                :pageCount="pageCount"
                :pageNo="pageNo"
                @pageChange="pageChange"
                selection
                @handleSelectionChange="handleSelectionChange"
                :height="secondTableHeight"
            ></table-index>
            <Spin size="large" fix v-if="spinShow" class="demo-spin">
                <Icon type="ios-loading" size="18" class="demo-spin-icon-load"></Icon>
                <div>数据加载中...</div>
            </Spin>
        </div>

        <kongtiaoDetail v-if="showAdd" @dialogClose="showAdd = false" title="空调温控方案配置"></kongtiaoDetail>

        <airConfigPl v-if="showCL" @dialogClose="showCL = false" @save="saveData" :treeList="selectDeviceList"></airConfigPl>
        <airConfigCS v-if="showCS" @dialogClose="showCS = false" @save="saveCs" :treeList="selectDeviceList"></airConfigCS>

        <airConfigUserCS
            v-if="showUserCS"
            @dialogClose="showUserCS = false"
            @save="saveUserCs"
            :treeList="selectDeviceList"
        ></airConfigUserCS>

        <loading :title="loadingTitle" :show="showloading"></loading>
    </div>
</template>

<script>
import customDialog from '@/components/customComponents/customDialog'
import customButton from '@/components/customComponents/customForm/customButton'
import formIndex from '@/components/customComponents/customForm/formIndex'
import tableIndex from '@/components/customComponents/customeTable/iviewTable/singleViewTable'
import navigationBar from '@/components/customComponents/managementCenter/navigationBarCustomTitle'
import {AjaxCommon} from '@/libs/apiCommon'
import {PopupCommon} from '@/libs/popupCommon'
import {Utility} from '@/libs/utility'
import addAirPlan from './addAirPlan.vue'
import airConfigPl from './airConfigPl'
import airConfigCS from './airConfigCS.vue'
import airConfigUserCS from './airConfigUserCS.vue'
import kongtiaoDetail from '../../../../qyjn/components/threeDevice/kongtiaoDetail'
import loading from '@/components/loading'
export default {
    components: {
        navigationBar,
        customButton,
        tableIndex,
        customDialog,
        formIndex,
        addAirPlan,
        kongtiaoDetail,
        airConfigPl,
        airConfigCS,
        airConfigUserCS,
        loading
    },
    props: ['treeNode'],
    watch: {
        treeNode: {
            handler(newV, oldV) {
                const isTrue = Utility.isEqual(newV, oldV)
                if (newV && oldV && !isTrue) {
                    this.treeList = newV
                    this.initPage(newV)
                }
            },
            immediate: true
        }
    },
    data() {
        return {
            showloading: false,
            loadingTitle: '数据处理中，请稍等...',
            showUserCS: false,
            showCS: false,
            showCL: false,
            xfValue: '3',
            xfOptions: [
                {
                    value: '1',
                    label: '未下发'
                },
                {
                    value: '2',
                    label: '下发中'
                },
                {
                    value: '3',
                    label: '下发成功'
                }
            ],

            showAdd: false,
            spinShow: false,
            treeList: [],
            secondTableHeight: 80,
            selectDeviceList: [],
            curTitle: '策略配置',
            // table 相关参数  begin
            dataSource: [],

            tableColumns: [
                {
                    type: 'selection',
                    width: 55,
                    align: 'center'
                },
                {
                    type: 'index',
                    width: 60,
                    align: 'center'
                },
                // {
                //     key: 'EQ_GUID',
                //     title: '设备ID',
                //     width: 140,
                //     align: 'center'
                // },

                // EQ_GUID:设备GUID
                // DEP_NAME:所属部门名称
                // eq_address设备地址
                // eq_name 设备名称
                // EQ_TYPE设备类型
                // BD_NAME 所属建筑名称
                // CYCLE_TIME 采集时间
                // VALID_COUNT（不展示） 参数数量
                // on_line 是否离线 0在线 1离线
                // V1-V40 ，
                // 根据VALID_COUNT参数数量判断有效字段如空调的控制器长度为19个参数
                // 空调返回v1-v19参数和实时参数接口对应（总用电量 + "|" + air.ARR.信号强度 + "|" + air.ARR.电流Ia +）
                // 列表中只要展示 v1总用电量,V6开关机( 0关  1开),
                // V7设定模式( 0：自动；1，制冷；2，除湿；3，送风；4，制热) ,V9设定温度
                {
                    key: 'eq_name',
                    title: '设备名称',
                    align: 'center'
                },
                // {
                //     key: 'EQ_TYPE',
                //     title: '设备类型',
                //     align: 'center'
                // },
                {
                    key: 'DEP_NAME',
                    title: '所属部门',
                    align: 'center'
                },
                {
                    key: 'eq_address',
                    title: '设备地址',
                    align: 'center'
                    // slot: 'wlzt'
                },
                {
                    key: 'BD_NAME',
                    title: '所属建筑名称',
                    align: 'center'
                },
                {
                    key: 'CYCLE_TIME',
                    title: '采集时间',
                    align: 'center'
                },
                {
                    key: 'on_line',
                    title: '是否离线',
                    align: 'center',
                    slot: 'on_line',
                    width: 100
                },
                {
                    key: 'V1',
                    title: '总用电量',
                    width: 100,
                    align: 'center'
                },
                {
                    key: 'V6',
                    title: '开关机',
                    width: 90,
                    slot: 'V6'
                },
                {
                    key: 'V7',
                    title: '设定模式',
                    // width: 180,
                    slot: 'V7',
                    width: 100
                },
                {
                    key: 'V9',
                    title: '设定温度',
                    width: 100
                    // slot: 'V9'
                }
            ],
            btnList: [],
            pageSize: 20,
            pageCount: 100,
            pageNo: 1,
            // table 相关参数  end

            // 弹窗是否显示
            dialogShow: false
        }
    },
    created() {},
    methods: {
        hzClick(e) {
            if (this.selectDeviceList.length == 0) {
                PopupCommon.notify('info', '请至少选择一个设备')
                return
            }
            const self = this

            const ids = this.selectDeviceList?.map((t) => t.eq_guid)?.toString()
            if (e == 'fz' || e == 'hz') {
                const title = e == 'fz' ? '分闸' : '合闸'
                PopupCommon.confirm(`确定要将这些设备进行${title}?`)
                    .then(() => {
                        self.showloading = true
                        //                  1、主继电器通断（断电工作模式启用）
                        // sjx参数项传2   cs参数  开关机指令  0 分闸  1 按策略  2（合闸）无条件使用
                        AjaxCommon(`/api/TimePlan/BatchWriteSetRun`, 'post', {
                            ids,
                            sjx: 2,
                            cs: e == 'fz' ? 0 : 2
                        }).then((res) => {
                            if (res?.data?.Message == 'ok') {
                                PopupCommon.notify('success', '设置成功')
                            }
                            self.showloading = false
                        })
                    })
                    .catch(() => {
                        // 这里尽量写下，否则会报警告异常。
                        console.log('已取消删除')
                    })
            } else if (e == 'xs') {
                //                 15、终端校时
                // Sjx=20  cs参数设定对应 （0个参数，传空“”）
                PopupCommon.confirm(`确定要将这些设备进行终端校时?`)
                    .then(() => {
                        self.showloading = true
                        //                  1、主继电器通断（断电工作模式启用）
                        // sjx参数项传2   cs参数  开关机指令  0 分闸  1 按策略  2（合闸）无条件使用
                        AjaxCommon(`/api/TimePlan/BatchWriteSetRun`, 'post', {
                            ids,
                            sjx: 20,
                            cs: ''
                        }).then((res) => {
                            if (res?.data?.Message == 'ok') {
                                PopupCommon.notify('success', '终端校时成功')
                            }
                            self.showloading = false
                        })
                    })
                    .catch(() => {
                        // 这里尽量写下，否则会报警告异常。
                        console.log('已取消删除')
                    })
            } else {
                //                 14、设备重启
                // Sjx=19  cs参数设定对应 （0个参数，传空“”）
                PopupCommon.confirm(`确定要将这些设备进行终端校时?`)
                    .then(() => {
                        self.showloading = true
                        AjaxCommon(`/api/TimePlan/BatchWriteSetRun`, 'post', {
                            ids,
                            sjx: 19,
                            cs: ''
                        }).then((res) => {
                            if (res?.data?.Message == 'ok') {
                                PopupCommon.notify('success', '设备重启成功')
                            }
                            self.showloading = false
                        })
                    })
                    .catch(() => {
                        // 这里尽量写下，否则会报警告异常。
                        console.log('已取消删除')
                    })
            }
        },
        saveUserCs(d) {
            let self = this
            const ids = this.selectDeviceList?.map((t) => t.eq_guid)?.toString()
            PopupCommon.confirm('确定要保存当前用户参数?')
                .then(() => {
                    self.showloading = true
                    //               Sjx=17  cs参数设定对应 （5个参数，通过‘|’分隔）
                    // 休眠模式 | 预存电量|季节模式选择 |允许空调开机 |插座监控
                    AjaxCommon(`/api/TimePlan/BatchWriteSetRun`, 'post', {
                        ids,
                        sjx: 17,
                        cs: d
                    }).then((res) => {
                        if (res?.data?.Message == 'ok') {
                            self.showUserCS = false
                            PopupCommon.notify('success', '设置成功')
                        }
                        self.showloading = false
                        // else {
                        //     PopupCommon.notify('error', res?.Message ?? '设置失败')
                        // }
                    })
                })
                .catch(() => {
                    // 这里尽量写下，否则会报警告异常。
                    console.log('已取消删除')
                })
        },
        saveCs(d) {
            let self = this
            const ids = this.selectDeviceList?.map((t) => t.eq_guid)?.toString()
            PopupCommon.confirm('确定要保存当前系统参数?')
                .then(() => {
                    self.showloading = true
                    //             Sjx=15  cs参数设定对应 （5个参数，通过‘|’分隔）
                    // 空调品牌代码|空调电流阈值|插座检测功率 | 温度选择 |心跳周期
                    AjaxCommon(`/api/TimePlan/BatchWriteSetRun`, 'post', {
                        ids,
                        sjx: 15,
                        cs: d
                    }).then((res) => {
                        if (res?.data?.Message == 'ok') {
                            self.showCS = false
                            PopupCommon.notify('success', '设置成功')
                        }
                        self.showloading = false
                        // else {
                        //     PopupCommon.notify('error', res?.Message ?? '设置失败')
                        // }
                    })
                })
                .catch(() => {
                    // 这里尽量写下，否则会报警告异常。
                    console.log('已取消删除')
                })
        },
        saveData(d) {
            let self = this
            const ids = this.selectDeviceList?.map((t) => t.eq_guid)?.toString()
            PopupCommon.confirm('确定要保存当前设置?')
                .then(() => {
                    self.showloading = true
                    AjaxCommon(`/api/TimePlan/BatchWriteSetRun`, 'post', {
                        ids,
                        sjx: 9,
                        cs: d
                    }).then((res) => {
                        if (res?.data?.Message == 'ok') {
                            self.showCL = false
                            PopupCommon.notify('success', '设置成功')
                        }
                        self.showloading = false
                        // else {
                        //     PopupCommon.notify('error', res?.Message ?? '设置失败')
                        // }
                    })
                })
                .catch(() => {
                    // 这里尽量写下，否则会报警告异常。
                    console.log('已取消删除')
                })
        },
        getHeight() {
            // 1825
            this.secondTableHeight = document.getElementsByClassName('rightContentHref')[0].clientHeight - 85
        },
        handleSelectionChange(d) {
            this.selectDeviceList = d
        },
        dialogClose() {
            this.dialogShow = false
        },
        userParamsClick() {
            if (this.selectDeviceList.length == 0) {
                PopupCommon.notify('info', '请至少选择一个设备')
                return
            }
            this.showUserCS = true
        },
        systemParamsClick() {
            if (this.selectDeviceList.length == 0) {
                PopupCommon.notify('info', '请至少选择一个设备')
                return
            }
            this.showCS = true
        },
        plOprClick() {
            if (this.selectDeviceList.length == 0) {
                PopupCommon.notify('info', '请至少选择一个设备')
                return
            }
            this.showCL = true
        },
        searchClick() {
            this.pageNo = 1
            this.initPage(this.treeList)
        },
        // 分页点击事件
        pageChange(p) {
            this.pageNo = p
            this.initPage(this.treeList)
        },
        // 初始化事件
        initPage(list) {
            let self = this
            const ids = list
                ?.filter((t) => t.type == 'eq')
                ?.map((t) => t.id)
                ?.toString()
            if (ids == '') {
                self.dataSource = []
                return
            }
            const params = `/api/TimePlan/GetAirEqInfo`
            AjaxCommon(params, 'post', {
                ids,
                pageSize: this.pageSize,
                pageIndex: this.pageNo
            }).then((res) => {
                if (res?.data?.Code == 200) {
                    const data = res?.data.Message
                    self.dataSource = data?.rows
                    self.pageCount = parseInt(data?.total ?? 0)
                } else {
                    PopupCommon.notify('error', res?.data?.msg)
                }
            })

            // let newData = []
            // for (let index = 0; index < 10; index++) {
            //     let item = {
            //         famc: '方案名称1' + index,
            //         xiaji: '27℃',
            //         dongji: '2℃',
            //         zdkz: index % 2 == 0 ? '1,2' : '1',
            //         xiajigaoyu: '27℃',
            //         wlzt: index % 2 == 0 ? '在线' : '离线',
            //         dongjigaoyu: '12℃',
            //         dongjidiyu: '2℃',
            //         sfyx: index % 2 == 0 ? 1 : 0,
            //         sfkqsdkz: index % 2 == 0 ? 1 : 0,
            //         zhczr: '张三' + index,
            //         czsj: '2025-09-02 11:11:22',
            //         clxfsj: '2025-09-01 11:11:22',
            //         bz: '备注1111111111' + index,
            //         ktwd: '1231' + index
            //     }
            //     newData.push(item)
            // }
            // self.dataSource = newData
            // self.selectDeviceList = []
            // self.pageCount = 10
        }
    },
    mounted() {
        this.$nextTick(() => {
            this.getHeight()
        })

        /*窗口自适应，关键代码*/
        window.onresize = () => {
            this.getHeight()
        }
    }
}
</script>

<style scoped lang="scss">
.demo-spin {
    background-color: rgba(0, 0, 0, 0.2);
}
.demo-spin-icon-load {
    animation: ani-demo-spin 1s linear infinite;
}
@keyframes ani-demo-spin {
    from {
        transform: rotate(0deg);
    }
    50% {
        transform: rotate(180deg);
    }
    to {
        transform: rotate(360deg);
    }
}
</style>
